맨위로가기 타임라인 바로가기

가상 머신

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
타임라인 바로가기

1. 개요

가상 머신은 실제 컴퓨터의 효율적이고 고립된 복제물로, 하드웨어와 직접적인 통신 없이 가상 컴퓨터를 구현한다. 시분할 시스템에서 시작되어, 시스템 가상 머신과 프로세스 가상 머신으로 발전했다. 시스템 가상 머신은 완전한 운영 체제 실행을 지원하며, 프로세스 가상 머신은 단일 프로세스를 지원하여 플랫폼 독립적인 프로그래밍 환경을 제공한다. 가상화 기술은 완전 가상화, 하드웨어 지원 가상화, 운영 체제 수준 가상화로 나뉘며, 스냅샷, 마이그레이션, 페일오버, 중첩 가상화와 같은 관련 기술도 존재한다.

더 읽어볼만한 페이지

  • 가상 머신 - V8 (자바스크립트 엔진)
    V8은 구글이 개발한 오픈 소스 자바스크립트 엔진으로, 자바스크립트 코드 실행 속도 향상을 위해 여러 컴파일러를 거쳐 크롬, 노드.js 등에서 활용된다.
  • 가상 머신 - X86 가상화
    X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다.
  • 프로그래밍 언어 구현 - 어셈블리어
    어셈블리어는 사람이 이해하기 쉬운 니모닉 기호로 기계어 명령을 표현하는 저수준 프로그래밍 언어로서, 각 프로세서마다 사양이 다른 어셈블리어가 존재하며 하드웨어 직접 제어, 성능 최적화, 저수준 시스템 프로그래밍 등에 활용된다.
  • 프로그래밍 언어 구현 - 컴파일러
    컴파일러는 고급 프로그래밍 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 저급 언어로 변환하는 프로그램으로, 어휘 분석, 구문 분석, 의미 분석, 최적화, 코드 생성 등의 단계를 거쳐 목적 코드를 생성하며, 네이티브 컴파일러, 크로스 컴파일러 등으로 분류되어 다양한 분야에서 활용된다.
  • 가상화 소프트웨어 - X86 가상화
    X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다.
  • 가상화 소프트웨어 - VM웨어 v스피어
    VM웨어 v스피어는 VM웨어에서 개발한 서버 가상화 플랫폼으로, 다양한 운영체제 지원, 가상 시스템 확장, vMotion 개선, 스토리지 관리 효율성 향상 등의 특징을 가지며 클라우드 환경 지원 강화 및 관리 효율성 증대에 초점을 맞추어 지속적으로 업데이트되고 있다.
가상 머신
기본 정보
가상 머신 블록 다이어그램
가상 머신 블록 다이어그램
유형가상화
관련 항목가상화
에뮬레이터
QEMU
분류
프로세스 가상 머신자바 가상 머신
닷넷 프레임워크
파이썬
시스템 가상 머신VMware
Hyper-V
Xen
KVM
특징
주요 목표시스템 가상 머신: 다양한 운영체제 지원
프로세스 가상 머신: 플랫폼 독립성
장점리소스 활용률 향상
관리 용이성
보안 강화
단점성능 오버헤드
자원 경쟁

2. 역사

시스템 가상 머신과 프로세스 가상 머신은 모두 1960년대로 거슬러 올라가며, 현재까지도 활발하게 개발되고 있다.

1940년대부터 1950년대의 컴퓨터는 기종마다 아키텍처가 달랐지만, 기존 설계를 참고하여 신규 설계의 위험을 피하거나, 다른 컴퓨터의 기존 프로그램 및 라이브러리를 활용하기 위한 목적으로, 기존 기종과 명령 집합에 호환성을 가지거나 논리 설계를 공통으로 한, 일종의 호환기라고 할 수 있는 머신도 존재했다.

가상 머신과 관련된 주요 사건들은 다음과 같다.

연도내용
1958년IBM 709 (마이크로 코드를 사용한, 상업용 최초의 다른 아키텍처의 에뮬레이터)
1961년배로우스 B5000 (상업용 최초의 가상 메모리 장치)
1964년IBM System/360
1970년IBM System/370 (상업용 최초의 복수 주소 공간)
1973년IBM System/370 모델 158/168 (상업용 최초의 물리적 분할)
1985년인텔 i386에서 가상 86 모드 채용
1987년IBM PR/SM (상업용 최초의 펌웨어에 의한 논리적 분할 (LPAR))
1995년자바 공식 발표 (자바 가상 머신 등장)
1997년썬 마이크로시스템즈 다이내믹 시스템 도메인 (DSD, UNIX 서버에서 최초의 물리적 분할 기능)
1999년VMware 등장 (x86 시스템의 본격적인 상업용 가상화 OS)
2001년IBM pSeries (UNIX 서버에서 최초의 논리적 분할 (LPAR))
2008년 3월오라클 Oracle VM 발표 (베이스는 Xen)
2008년 6월마이크로소프트 Hyper-V (개발 코드명 Viridian) 발표


2. 1. 초기 발전 (1960년대 ~ 1970년대)

시스템 가상 머신과 프로세스 가상 머신은 모두 1960년대에 시작되었으며, 현재까지도 활발히 개발되고 있다.
시스템 가상 머신시분할 시스템에서 시작되었으며, 특히 호환 시분할 시스템(CTSS)에서 두드러지게 구현되었다. 시분할 시스템은 여러 사용자가 컴퓨터를 동시 컴퓨팅할 수 있도록 했다.[11] 각 프로그램은 컴퓨터에 대한 전체 액세스 권한을 갖는 것처럼 보였지만, 한 번에 하나의 프로그램만 실행되었고, 시스템은 시간 조각으로 프로그램 간을 전환하여 매번 상태를 저장하고 복원했다. 이는 가상 머신으로 발전했으며, 특히 IBM의 연구 시스템을 통해 발전했다. M44/44X는 부분 가상화를 사용했고, CP-40과 SIMMON은 전체 가상화를 사용했으며, 초기 하이퍼바이저의 예시였다. 최초로 널리 사용된 가상 머신 아키텍처는 CP-67/CMS (자세한 내용은 CP/CMS의 역사 참조)였다. 중요한 차이점은 M44/44X 및 CP-40과 같이 시분할을 위해 하나의 호스트 시스템에서 여러 가상 머신을 사용하는 것과 SIMMON과 같이 프로토타입 제작을 위해 호스트 시스템에서 하나의 가상 머신을 사용하는 것이었다. 이전 시스템과의 호환성을 위해 하드웨어 에뮬레이션을 사용한 에뮬레이터는 1963년 IBM System/360부터 시작되었고, 소프트웨어 에뮬레이션(당시에는 "시뮬레이션"이라고 불림)은 그보다 먼저 시작되었다.
프로세스 가상 머신은 원래 컴파일러가 프로그램을 중간 표현으로 사용하는 중간 언어에 대한 추상적인 플랫폼으로 등장했다. 초기 예시는 약 1964년에 META II 컴파일러 작성 시스템이 구문 설명과 대상 코드 생성을 위해 사용한 것이다. 주목할 만한 1966년의 예는 O-code 머신이었다. 이는 BCPL 컴파일러의 프런트엔드에서 생성된 O-코드(객체 코드)를 실행하는 가상 머신이었다. 이 추상화는 기존 O-코드를 가져와 기본 물리적 머신용 머신 코드로 컴파일하는 새로운 백엔드를 구현함으로써 컴파일러를 새로운 아키텍처로 쉽게 포팅할 수 있도록 했다. Euler 언어는 중간 언어가 'P'(이식 가능)라는 유사한 설계를 사용했다. 이는 1970년경 파스칼에 의해 대중화되었으며, 특히 Pascal-P 시스템(1973)과 Pascal-S 컴파일러(1975)에서 p-code라고 불렸고, 결과 머신은 p-code 머신이라고 불렸다. 이는 큰 영향을 미쳤으며, 이러한 의미의 가상 머신은 일반적으로 p-code 머신이라고 불렸다. Pascal p-code는 중간 언어일 뿐만 아니라 UCSD 파스칼(1978)에서 특히 가상 머신을 구현하는 인터프리터에 의해 직접 실행되었으며, 이는 나중에 Java 가상 머신(JVM)을 비롯한 인터프리터에 영향을 미쳤다. 또 다른 초기 예시는 SNOBOL4(1967)였으며, 이는 가상 머신용 어셈블리 언어인 SNOBOL 구현 언어(SIL)로 작성되었으며, 매크로 어셈블러를 통해 기본 어셈블러로 트랜스파일링하여 물리적 머신을 대상으로 했다. 그러나 매크로는 이후 인기를 잃었으므로 이 방식은 영향력이 줄어들었다. 프로세스 가상 머신은 Tiny BASIC 및 어드벤처 게임을 포함하여 초기 마이크로컴퓨터 소프트웨어를 구현하는 데 널리 사용되었으며, Pyramid 2000과 같은 일회성 구현부터 Infocom의 z-머신과 같은 범용 엔진까지 사용되었다. 그레이엄 넬슨은 이를 "아마도 가장 이식성이 뛰어난 가상 머신"이라고 주장한다.

스몰토크-80의 구현에서 중요한 발전이 있었다. 특히 Deutsch/Schiffmann 구현은 Just-in-time(JIT) 컴파일을 프로세스 가상 머신을 사용하는 구현 방식으로 추진했다. 이후 주목할 만한 스몰토크 VM은 VisualWorks, Squeak 가상 머신, 및 Strongtalk이다. 많은 가상 머신 혁신을 낳은 관련 언어는 Self 프로그래밍 언어였으며, 적응형 최적화 및 세대별 가비지 컬렉션을 개척했다.

1940년대부터 1950년대의 컴퓨터는 기종마다 아키텍처가 달랐지만, 기존 설계를 참고하여 신규 설계의 위험을 피하거나, 다른 컴퓨터의 기존 프로그램 및 라이브러리를 활용하기 위한 목적으로, 기존 기종과 명령 집합에 호환성을 가지거나 논리 설계를 공통으로 한, 일종의 호환기라고 할 수 있는 머신도 존재했다. 예를 들어 EDSAC이 자주 참고되었다.

1979년 IBM System/38은 TIMI (Technology Independent Machine Interface, 기술 독립 머신 인터페이스)를 채택했다. TIMI는 메인프레임에서 채택된 마이크로코드를 통한 호환성 확보를 더욱 발전시킨 것으로, 주로 수평형 레벨 마이크로코드를 통해 실현되었으며, 하드웨어 아키텍처(CPU 명령어 세트 등)와 프로그램을 분리하고 있다. 프로그램 배포는 중간 코드인 바이트코드로 이루어지며, 설치 시 하드웨어의 명령어 세트로 전개된다.

2. 2. 1980년대 이후 발전

스몰토크-80 구현에서 상당한 진전이 있었는데,[11] 특히 Deutsch/Schiffmann 구현에서[12] 프로세스 가상 머신을 활용한 구현 방식인 JIT 컴파일을 가속화했다.[13]

현대의 가상 머신은 컴파일을 위한 중간 대상 또는 인터프리터에서 직접 구현할 플랫폼으로 사용된다. 예를 들어 2013년에 공개된 안드로이드 런타임(ART)은 바이트코드를 네이티브 코드로 컴파일하며, 초기의 달빅 가상 머신은 바이트코드를 해석한다.

1979년 IBM System/38은 TIMI (Technology Independent Machine Interface, 기술 독립 머신 인터페이스)를 채택했다. TIMI는 메인프레임에서 채택된 마이크로코드를 통한 호환성 확보를 더욱 발전시킨 것으로, 주로 수평형 레벨 마이크로코드를 통해 실현되었으며, 하드웨어 아키텍처(CPU 명령어 세트 등)와 프로그램을 분리하고 있다. 프로그램 배포는 중간 코드인 바이트코드로 이루어지며, 설치 시 하드웨어의 명령어 세트로 전개된다. 이 때문에 소스 프로그램을 배포하지 않고도 실행 시 성능 저하 없이 다른 아키텍처의 하드웨어로 이전도 용이하다. 실제로, CPU 아키텍처의 이전(독자적인 CISC에서 POWER로)도 쉽게 이루어졌다고 한다.

TIMI는 System/38의 후속 기종인 AS/400, iSeries, System i, Power Systems i Edition에 현재까지 사용되고 있다.

주요 사건들은 다음과 같다.

연도내용
1985년인텔 i386에서 가상 86 모드 채용
1987년IBM PR/SM (상업용 최초의 펌웨어에 의한 논리적 분할 (LPAR))
1995년자바 공식 발표 (자바 가상 머신 등장)
1997년썬 마이크로시스템즈 다이내믹 시스템 도메인 (DSD, UNIX 서버에서 최초의 물리적 분할 기능)
1999년VMware 등장 (x86 시스템의 본격적인 상업용 가상화 OS)
2001년IBM pSeries (UNIX 서버에서 최초의 논리적 분할 (LPAR))
2008년 3월오라클 Oracle VM 발표 (베이스는 Xen)
2008년 6월마이크로소프트 Hyper-V (개발 코드명 Viridian) 발표


3. 정의

가상 머신은 원래 포펙과 골드버그가 "실제 컴퓨터의 효율적이고 고립된 복제물"로 정의했다. 현재는 "실제 하드웨어와 직접적인 통신이 없는 가상 컴퓨터"를 가리킨다.

가상 머신은 실제 컴퓨터와의 통신 및 사용 정도에 따라 두 가지로 나뉜다.


  • '''시스템 가상 머신''': 완전한 시스템 플랫폼을 제공하며, 완전한 운영 체제 (OS)의 실행을 지원한다.
  • '''프로세스 가상 머신''': 하나의 단일 프로그램을 실행하기 위해 만들어져, 단일 프로세스를 지원한다.


가상 머신의 중요한 특징은 안에서 돌아가는 소프트웨어가 가상 머신이 제공하는 환경과 자원에 제한을 받으며 가상 세계를 벗어날 수 없다는 것이다.

3. 1. 시스템 가상 머신

시스템 가상 머신은 '''하드웨어 가상 머신'''이라고도 불리며, 여러 운영 체제를 실행하는 가상 머신 사이에서 기반이 되는 물리 컴퓨터를 다중화한다. 가상화를 제공하는 소프트웨어 계층은 '''가상 머신 모니터''' 또는 하이퍼바이저라고 부른다. 하이퍼바이저는 순수 하드웨어나 호스트 운영 체제 위에서 실행될 수 있다.

시스템 가상 머신의 주요 이점은 다음과 같다.

  • 여러 운영 체제 환경이 완벽히 고립된 채로 같은 컴퓨터에 존재할 수 있다.
  • 가상 머신은 실제 컴퓨터가 제공하는 것과 다른 형태의 명령어 집합 구조 (ISA)를 제공할 수 있다.


자체 운영 체제를 실행하는 여러 개의 가상 머신들은 게스트 운영 체제라고 불리며, 서로 다른 장치가 충돌을 피하기 위해 각 장치에서 실행하기 위한 '''서버 통합'''(server consolidation)에 사용된다. 이러한 사용을 '''제품 품질의 고립'''(QoS 고립)이라고 한다.

여러 개의 운영 체제를 사용하려는 열망은 가상 머신의 원래 취지였으며, 여러 개의 단일 작업 운영 체제들 사이에서 시분할 단일 컴퓨터를 허용한다.

게스트 운영 체제들은 모두 같을 필요는 없다. 즉, 같은 컴퓨터에서 다른 운영 체제를 실행할 수 있게 해준다. (예: 마이크로소프트 윈도우리눅스, 또는 최신 버전에서 지원하지 않는 소프트웨어를 지원하기 위해 옛날 버전의 운영 체제를 설치) 다른 게스트 운영 체제를 지원하기 위해 가상 머신을 사용하는 것은 임베디드 시스템에서 인기를 끌고 있다. 일반적으로 리눅스와 윈도와 같은 높은 수준의 운영 체제로서 실시간 운영 체제를 지원한다.

다른 사용으로는 신뢰할 수 없는 운영 체제를 sandbox하는 것이다. 왜냐하면 그 시스템이 개발 중인 시스템일 수도 있기 때문이다. 가상 머신들은 더 나은 오류 수정 접근과 더 빠른 다시 시작과 더불어 운영 체제 개발에 다른 이점들을 가져다 준다.

시스템 가상 머신은 시스템 전체를 재현하고, 그 위에서 OS를 실행하는 것을 가능하게 한다. 실행하는 OS에 약간의 변경을 가해야 하는 경우(반가상화)도 있다.

시스템 가상 머신에서는 여러 가상 머신에 계산 자원, 메모리 자원, 디스크 자원을 효율적으로 배분(스케줄링)하거나, 하드웨어 인터럽트 등을 전달할 필요가 있다. 이것들을 제어하는 프로그램을 하이퍼바이저라고 부른다.

시스템 가상 머신은 사용자나 프로그램에게 "다른 컴퓨터"로 보이는 것(OS 환경을 실현하는 것)을 가리키지만, 컴퓨터 초창기에는 가상 기억 장치, 멀티태스킹, 멀티유저, 시분할 등 현재는 OS의 기능이 된 기술을 포함하는 경우도 있다. 가상 머신 기술은 메인프레임에서 사용되었지만, 현재 컴퓨터에 의한 서비스 제공 분야에서 일반적인 기술이 되고 있다.

클라우드 컴퓨팅에서 하드웨어에 의존하지 않는 가상 실행 환경의 구축은 기반 기술(IaaS)로 이용된다.

가상 머신의 역사적 발전은 다음과 같다.

연도내용
1958년IBM 709 (마이크로 코드를 사용한, 상업용 최초의 다른 아키텍처의 에뮬레이터)
1961년배로우스 B5000 (상업용 최초의 가상 메모리 장치)
1964년IBM System/360
1970년IBM System/370 (상업용 최초의 복수 주소 공간)
1973년IBM System/370 모델 158/168 (상업용 최초의 물리적 분할)
1985년인텔 i386에서 가상 86 모드 채용
1987년IBM PR/SM (상업용 최초의 펌웨어에 의한 논리적 분할 (LPAR))
1995년자바 공식 발표 (자바 가상 머신 등장)
1997년썬 마이크로시스템즈 다이내믹 시스템 도메인 (DSD, UNIX 서버에서 최초의 물리적 분할 기능)
1999년VMware 등장 (x86 시스템의 본격적인 상업용 가상화 OS)
2001년IBM pSeries (UNIX 서버에서 최초의 논리적 분할 (LPAR))
2008년3월 오라클 Oracle VM 발표 (베이스는 Xen)
2008년6월 마이크로소프트 Hyper-V (개발 코드명 Viridian) 발표



하드웨어 (빌딩 블록) 기능에 따른 물리적 분할에는 IBM의 PPAR, 썬 마이크로시스템즈의 DSD, 휴렛 팩커드의 nPars 등이 있으며, 블레이드 서버를 포함하는 경우도 있다. 하드웨어 (마이크로코드) 기능에 따른 논리적 분할에는 IBM의 LPAR, 썬 마이크로시스템즈의 LDOM, 휴렛 팩커드의 vPars 등이 있다.

가상화 소프트웨어 기능에 따른 분할에는 z/VM, VMware, Xen, VirtualBox, Hyper-V 등이 있으며, 내부적으로 하드웨어 기능을 활용하는 경우도 많다. OS 기능에 따른 다중 OS 환경에는 AIX 6 워크로드 파티션, Solaris10 Solaris 컨테이너 등이 있다. 또한 Hyper-V는 Windows Server 2008의 일부로 제공되지만, 단독 제공도 되며, 기술적, 구조적으로는 전용 가상화 OS이다. 미들웨어 기능에 따른 부하 관리에는 z/OS 워크로드 매니저, AIX 워크로드 매니저, Solaris 리소스 매니저, HP-UX 워크로드 매니저 등이 있다.

1964년 IBM System/360에서는 상업용 최초의 가상화 OS인 CP-40, CP-67을 통해 하나의 컴퓨터에서 여러 가상 컴퓨터를 생성하여 각각에서 게스트 OS( MVS나 CMS 등)를 작동시킬 수 있었다. 이 가상화 OS는 VM/CMS가 되었으며, 현재도 z/VM으로 다수의 게스트 OS(리눅스 등)를 동시 작동시키는 용도로도 사용되고 있다.

1979년 IBM System/38은 TIMI(Technology Independent Machine Interface, 기술 독립 머신 인터페이스)를 채택했다. TIMI는 메인프레임에서 채택된 마이크로코드를 통한 호환성 확보를 더욱 발전시킨 것으로, 주로 수평형 레벨 마이크로코드를 통해 실현되었으며, 하드웨어 아키텍처(CPU 명령어 세트 등)와 프로그램을 분리하고 있다. 프로그램 배포는 중간 코드인 바이트코드로 이루어지며, 설치 시 하드웨어의 명령어 세트로 전개된다.

상용 유닉스 벤더의 가상화 기술은 다음과 같다. 현재 가상화 기술은 각종 하드웨어와 소프트웨어가 밀접하게 연동되어 있으며, 벤더에 따라 각 기술의 범위가 다르므로, 벤더 단위로 기술한다.


  • IBM PowerVM
  • LPAR(논리 구획)
  • 마이크로 파티셔닝
  • WPAR
  • AIX WLM
  • N1 구상(unified virtualization manager environment영어)
  • DSD (dynamic system domain영어)
  • LDOM (logical domain영어)
  • Solaris 컨테이너
  • Solaris 리소스 관리자
  • HP Virtual Server Environment for HP-UX
  • nPartitions(nPars)
  • Virtual Partitions(vPars)
  • HP Integrity Virtual Machines (Integrity VM)
  • HP-UX Workload Manager
  • 애플(Apple Inc.) macOS
  • Hypervisor.framework[7]
  • Virtualization framework[8]


유닉스, 리눅스, 윈도우에서 동작하는 가상 머신에는 VMware, Xen, Oracle VM (기반은 Xen), Hyper-V 등이 있다.

3. 2. 프로세스 가상 머신

프로세스 VM은 응용 가상 머신 또는 관리형 런타임 환경(MRE)이라고도 불리며, 호스트 OS 내에서 일반적인 응용 프로그램처럼 실행되어 단일 프로세스를 지원한다. 해당 프로세스가 시작될 때 생성되고 종료될 때 파괴된다. 이 가상 머신의 목적은 기본 하드웨어 또는 운영 체제의 세부 사항을 추상화하여 모든 플랫폼에서 동일한 방식으로 프로그램을 실행할 수 있도록 하는 시스템 플랫폼 독립적인 프로그래밍 환경을 제공하는 것이다.

프로세스 VM은 고급 프로그래밍 언어의 높은 수준의 추상화를 제공한다(시스템 VM의 낮은 수준의 ISA 추상화와 비교). 프로세스 VM은 인터프리터를 사용하여 구현되며, JIT 컴파일을 사용하여 컴파일된 프로그래밍 언어와 비슷한 성능을 얻을 수 있다.

이러한 유형의 VM은 자바 프로그래밍 언어에서 인기를 얻었으며, 자바 가상 머신을 사용하여 구현된다. 다른 예로는 패럿 가상 머신과 .NET Framework가 있으며, 이들은 공용 언어 런타임이라는 VM에서 실행된다. 이들은 모두 모든 컴퓨터 언어에 대한 추상화 계층 역할을 할 수 있다.

프로세스 VM의 특별한 경우는 (잠재적으로 이기종인) 컴퓨터 클러스터의 통신 메커니즘을 추상화하는 시스템이다. 이러한 VM은 단일 프로세스로 구성되지 않고 클러스터의 각 물리적 머신당 하나의 프로세스로 구성된다. 프로그래머가 상호 연결 및 OS에서 제공하는 통신 메커니즘이 아닌 알고리즘에 집중할 수 있도록 하여 동시 응용 프로그램을 프로그래밍하는 작업을 쉽게 하도록 설계되었다. 통신이 발생한다는 사실을 숨기지 않으므로 클러스터를 단일 머신으로 표시하려고 시도하지 않는다.

다른 프로세스 VM과 달리 이러한 시스템은 특정 프로그래밍 언어를 제공하지 않고 기존 언어에 포함되어 있다. 일반적으로 이러한 시스템은 여러 언어(예: C포트란)에 대한 바인딩을 제공한다. 예로는 Parallel Virtual Machine (PVM)과 Message Passing Interface (MPI)가 있다.

여러 개의 애플리케이션 프로그램을 실행하기 위한 가상 머신도 존재한다. 일부 프로그래밍 언어 및 해당 구현에서는 이론상의 기계에 의해 실행되는 것을 상정하고 있으므로, 해당 기계를 에뮬레이트하는 경우가 많다. 소프트웨어를 통한 가상 CPU에서 바이트 코드를 실행하는 방식이 일반적이다. 바이트 코드의 실행 방식에는 인터프리터 방식, 실행 전에 모든 바이트 코드를 네이티브 코드로 변환하는 사전 컴파일 방식, 실행 시 컴파일 방식이 있다. 현재는 성능 측면에서 실행 시 컴파일 방식이 주류를 이룬다. 하드웨어 제약이 없다는 것이 특징이다.

형식화된 연산을 지원하는 가상 머신도 있다.

아키텍처구현특징
ActionScript 가상 머신Adobe AIR
Adobe Flash Player
스택 머신
CLIPlayStation Mobile
.NET Framework
DotGNU Portable.NET
.net by au
Mono
SSCLI
CLR
스택 머신
Erlang VM영어BEAM영어
자바 가상 머신GNU Interpreter for Java
HotSpot
IKVM.NET
Kaffe
leJOS
Microsoft VM
SableVM
스택 머신
Lazy Virtual Machine
LLVM최적화를 위한 컴파일러 기반
Lua VMLua레지스터형의 심플한 아키텍처
Parrot 가상 머신Parrot레지스터형
P 코드 머신UCSD Pascal
Python 가상 머신[9]CPython스택 머신
Smalltalk VMSmalltalk-72/74/76/78/80
ObjectWorks
VisualWorks
Squeak
VisualAge Smalltalk
Little Smalltalk
GNU Smalltalk
Smalltalk/V
Smalltalk/X
기타
스택 머신



이러한 가상 머신은 이론적으로 설계되었지만, 실행을 최적화하기 위해 이에 상응하는 하드웨어가 제작되는 경우도 있다.

4. 가상화 기술

가상화 기술은 시스템 전체를 재현하고 그 위에서 OS를 실행할 수 있게 해준다. 경우에 따라 실행하는 OS에 약간의 변경을 가해야 할 수도 있다(반가상화).

시스템 가상 머신에서는 여러 가상 머신에 계산 자원, 메모리 자원, 디스크 자원 등을 효율적으로 배분(스케줄링)하거나, 하드웨어 인터럽트 등을 전달할 필요가 있다. 이러한 것들을 제어하는 프로그램을 하이퍼바이저라고 부른다.

시스템 가상 머신은 사용자나 프로그램에게 "다른 컴퓨터"로 보이는 OS 환경을 실현하는 것을 가리킨다. 과거에는 가상 기억 장치, 멀티태스킹, 멀티유저, 시분할 등 현재는 OS의 기능이 된 기술을 포함하는 경우도 있었다. 가상 머신 기술은 메인프레임에서 사용되었지만, 현재 컴퓨터에 의한 서비스 제공 분야에서 일반적인 기술이 되고 있다.

클라우드 컴퓨팅에서 하드웨어에 의존하지 않는 가상 실행 환경 구축은 기반 기술(IaaS)로 이용된다.

가상화 기술에는 다음과 같은 종류가 있다.


  • 완전 가상화: 가상 머신이 수정되지 않은 "게스트" 운영체제를 실행할 수 있도록 충분한 하드웨어를 시뮬레이션한다.
  • 하드웨어 지원 가상화: 하드웨어가 가상 머신 모니터를 구축하고 게스트 OS가 격리된 상태로 실행될 수 있도록 지원한다.
  • 운영 체제 수준 가상화: 물리 서버를 운영 체제 수준에서 가상화하여 여러 개의 격리되고 안전한 가상화 서버를 단일 물리 서버에서 실행할 수 있도록 한다.

4. 1. 완전 가상화 (Full Virtualization)

완전 가상화는 가상 머신이 수정되지 않은 "게스트" 운영체제(동일한 명령어 집합을 위해 설계됨)를 격리된 상태에서 실행할 수 있도록 충분한 하드웨어를 시뮬레이션하는 것이다. 이 접근 방식은 1966년 IBM CP-40 및 CP-67에서 개척되었으며, 이는 VM 제품군의 전신이다.[1]

전체 가상화의 논리적 다이어그램


완전 가상화는 하드웨어의 완전한 가상화를 말하며 유형 1 또는 2의 하이퍼바이저(hypervisor)를 사용하여 추가된다.[1]

  • 하이퍼바이저 유형 1: 하드웨어에 직접 접근하여 실행한다.[1]
  • 하이퍼바이저 유형 2: 리눅스와 같은 다른 운영 체제에서 실행한다.[1]


각 가상 머신은 기초 하드웨어의 지원을 받는 아무 운영 체제에서나 실행할 수 있다. 사용자들은 두 개 이상의 다른 게스트 운영 체제들을 별도의 "개인" 가상 컴퓨터에서 동시에 실행할 수 있다.[1] 가상 머신은 에뮬레이터의 역할을 수행할 수도 있는데, 다른 컴퓨터 프로세서를 위해 쓰인 응용 소프트웨어와 운영 체제가 동작할 수 있게 도와준다.[1]

몇몇 가상 머신들은 자세한 규격으로 존재하는 하드웨어만 가상으로 구현한다. 예를 들면 다음과 같다.[1]

가상 머신 규격
p-code machine 규격
자바 가상 머신 규격
닷넷 프레임워크 규격의 심장부인 공통 언어 하부구조
오픈 펌웨어



이 기술은 다양한 컴퓨터가 해당 규격에 맞춰 쓰인 아무 소프트웨어나 실행할 수 있게 해준다. 가상 머신 소프트웨어 자체만, 그 소프트웨어가 실행되는 각 컴퓨터에 맞춰 쓰인다.[1]

메인프레임 분야 외의 예로는 Parallels Workstation, Parallels Desktop for Mac, VirtualBox, Virtual Iron, Oracle VM, Virtual PC, Virtual Server, Hyper-V, VMware Fusion, VMware Workstation, VMware Server (단종, 이전 명칭: GSX Server), VMware ESXi, QEMU, Adeos, Mac-on-Linux, Win4BSD, Win4Lin Pro, 및 Egenera vBlade 기술이 있다.[1]

4. 2. 하드웨어 지원 가상화 (Hardware-Assisted Virtualization)

하드웨어 지원 가상화는 하드웨어가 가상 머신 모니터(VMM)를 구축하고 게스트 운영 체제(OS)가 격리된 상태로 실행될 수 있도록 지원하는 아키텍처적 지원을 제공한다. 이는 완전한 가상화의 한 형태로, 유형 1 또는 2 하이퍼바이저를 통해 구현된다.

  • 하이퍼바이저 유형 1은 하드웨어에 직접 접근하여 실행된다.
  • 하이퍼바이저 유형 2는 리눅스와 같은 다른 운영 체제에서 실행된다.


각 가상 머신은 기초 하드웨어의 지원을 받는 아무 운영 체제에서나 실행할 수 있으며, 사용자들은 두 개 이상의 다른 게스트 운영 체제들을 별도의 "개인" 가상 컴퓨터에서 동시에 실행할 수 있다.

하드웨어 지원 가상화는 1972년 VM/370과 함께 IBM System/370에서 처음 도입되었다.[1] 이는 IBM이 공식 제품으로 제공한 최초의 가상 머신 운영 체제였다.

2005년과 2006년에 인텔(Intel)과 AMD는 가상화를 지원하기 위한 추가 하드웨어를 제공했다. 썬 마이크로시스템즈(Sun Microsystems)(현재 오라클(Oracle Corporation))는 2005년 UltraSPARC T-Series 프로세서에 유사한 기능을 추가했다.

이러한 하드웨어에 적용된 가상화 플랫폼에는 KVM, VMware Workstation, VMware Fusion, Hyper-V, Windows Virtual PC, Xen, Parallels Desktop for Mac, Oracle VM Server for SPARC, VirtualBox, Parallels Workstation 등이 있다.

하지만 2006년에는 1세대 32비트 및 64비트 x86 하드웨어 지원이 소프트웨어 가상화보다 성능상의 이점을 거의 제공하지 않는 것으로 밝혀졌다.

4. 3. 운영 체제 수준 가상화 (OS-Level Virtualization)

운영 체제 수준 가상화는 서버 가상화 기술의 하나로, 서버 컴퓨터를 운영 체제(커널) 계층에서 가상화한다. 이는 단일 물리 서버를 여러 개의 작은 파티션(가상 환경(VE), 가상 사설 서버(VPS), 게스트, 존 등)으로 나누는 것으로 생각할 수 있다.

각 파티션은 사용자 관점에서 실제 서버와 비슷하게 보인다. "게스트" 운영 체제 환경은 호스트 시스템과 동일한 운영 체제 인스턴스를 공유한다. 따라서 동일한 운영 체제 커널이 "게스트" 환경을 구현하는 데에도 사용되며, 특정 "게스트" 환경에서 실행되는 응용 프로그램은 이를 독립 실행형 시스템으로 간주한다.

초기 구현은 FreeBSD jail이었으며, 다른 예로는 도커, 솔라리스 컨테이너, OpenVZ, Linux-VServer, LXC, AIX Workload Partitions, Parallels Virtuozzo Containers, iCore Virtual Accounts 등이 있다.

5. 가상 머신 관련 기술

가상 머신 관련 기술로는 스냅샷, 마이그레이션, 페일오버, 중첩 가상화 등이 있다.


  • '''스냅샷'''은 가상 머신의 특정 시점 상태를 저장하여 나중에 복원하는 기능이다.
  • '''마이그레이션'''은 가상 머신을 다른 호스트 머신으로 이동하는 기술이다.
  • '''페일오버'''는 호스트 장애 발생 시 가상 머신이 백업 서버에서 작업을 계속하도록 하는 기술이다.
  • '''중첩 가상화'''는 가상 머신 내에서 다른 가상 머신을 실행하는 기능이다.

5. 1. 스냅샷 (Snapshots)

'''스냅샷'''은 가상 머신, 일반적으로는 가상 머신의 저장 장치의 특정 시점의 상태를 의미한다. 스냅샷을 사용하면 스냅샷 당시의 가상 머신 상태를 나중에 복원하여, 이후에 발생한 모든 변경 사항을 효과적으로 되돌릴 수 있다. 이러한 기능은 예를 들어 위험한 작업을 수행하기 전에 백업 기술로 유용하게 사용될 수 있다.

가상 머신은 저장 공간으로 가상 디스크를 자주 사용한다. 매우 간단한 예로, 10-기가바이트 하드 디스크 드라이브는 10기가바이트 플랫 파일로 시뮬레이션된다. VM이 물리적 디스크의 특정 위치에 대한 요청을 할 때마다 해당 요청은 투명하게 해당 파일에 대한 작업으로 변환된다. 이러한 변환 계층이 존재하면, 다양한 기준에 따라 작업을 가로채어 다른 파일로 보낼 수 있다. 스냅샷을 찍을 때마다 새로운 파일이 생성되어 이전 파일의 오버레이로 사용된다. 새로운 데이터는 최상위 오버레이에 기록되지만, 기존 데이터를 읽으려면 오버레이 계층 구조를 스캔해야 하므로 가장 최근 버전의 데이터에 접근하게 된다. 따라서 스냅샷의 전체 스택은 가상적으로 단일 일관성 있는 디스크가 된다. 이런 의미에서 스냅샷 생성은 증분 백업 기술과 유사하게 작동한다.

가상 머신의 다른 구성 요소(예: 램, BIOS 설정 또는 구성 설정)도 스냅샷에 포함될 수 있다. 비디오 게임 콘솔 에뮬레이터의 "저장 상태" 기능이 이러한 스냅샷의 예이다.

스냅샷을 복원하는 것은 해당 스냅샷 이후에 추가된 모든 오버레이 계층을 폐기하거나 무시하고, 새로운 변경 사항을 새로운 오버레이로 보내는 것으로 구성된다.

5. 2. 마이그레이션 (Migration)

앞서 설명한 스냅샷은 자체 하이퍼바이저를 갖춘 다른 호스트 머신으로 이동할 수 있다. 가상 머신(VM)이 일시 중지되고, 스냅샷이 생성되며, 이동된 다음 새로운 호스트에서 다시 시작되는 과정을 마이그레이션이라고 한다. 이전 스냅샷이 정기적으로 동기화되어 유지되는 경우, 이 작업은 매우 빠르게 수행될 수 있으며, 가상 머신(VM)이 이전 물리적 호스트가 물리적 유지 보수를 위해 다운되는 동안에도 중단 없는 서비스를 제공할 수 있다.[1]

5. 3. 페일오버 (Failover)

위에 설명된 마이그레이션 메커니즘과 유사하게, 페일오버는 호스트에 장애가 발생할 경우 가상 머신이 작업을 계속할 수 있도록 한다. 일반적으로 마이그레이션이 작동을 멈춘 경우에 발생한다. 그러나 이 경우, 가상 머신은 백업 서버가 마지막으로 제공받은 자료를 기반으로 "현재" 상태가 아닌 "마지막으로 알려진" 일관된 상태부터 작업을 계속한다.

5. 4. 중첩 가상화 (Nested Virtualization)

중첩 가상화는 가상 머신 내에서 다른 가상 머신을 실행하는 기능을 말하며, 이 개념은 임의의 깊이까지 확장될 수 있다. 즉, 중첩 가상화는 다른 하이퍼바이저 내에서 하나 이상의 하이퍼바이저를 실행하는 것을 의미한다. 중첩 게스트 가상 머신의 특성은 호스트 가상 머신과 동일할 필요가 없다. 예를 들어, 애플리케이션 가상화는 하드웨어 가상화를 사용하여 생성된 가상 머신 내에서 배포할 수 있다.[2]

중첩 가상화는 널리 사용되는 운영 체제가 내장된 하이퍼바이저 기능을 갖게 되면서 더욱 필요해졌다. 이는 가상화된 환경에서 주변 하이퍼바이저가 중첩 가상화를 지원하는 경우에만 사용할 수 있다. 예를 들어, 윈도우 7은 내장된 가상 머신 내에서 윈도우 XP 애플리케이션을 실행할 수 있다. 또한, 기존 가상화된 환경을 서비스형 인프라(IaaS) 접근 방식에 따라 클라우드로 이동하는 것은 대상 IaaS 플랫폼이 중첩 가상화를 지원하지 않는 경우 훨씬 더 복잡해진다.[3][4]

중첩 가상화가 특정 컴퓨터 아키텍처에서 구현될 수 있는 방식은 지원되는 하드웨어 지원 가상화 기능에 따라 달라진다. 특정 아키텍처가 중첩 가상화에 필요한 하드웨어 지원을 제공하지 않는 경우, 이를 활성화하기 위해 다양한 소프트웨어 기술이 사용된다.[3] 시간이 지남에 따라 더 많은 아키텍처가 필요한 하드웨어 지원을 얻게 되었다. 예를 들어, Haswell 마이크로아키텍처(2013년 발표) 이후, 인텔은 중첩 가상화를 가속화하는 기술로서 VMCS 섀도잉을 포함하기 시작했다.[5]

6. 가상 머신을 지원하는 하드웨어 및 소프트웨어 목록

가상 머신은 크게 하드웨어 가상화, 시스템 가상 머신, 프로세스 가상 머신, 운영 체제 수준 가상화로 나눌 수 있다.


  • 하드웨어 가상화: 1972년 IBM System/370과 함께 VM/370에서 처음 도입되었다.[1] 인텔, AMD 등에서 관련 기술을 제공한다.
  • 시스템 가상 머신: 여러 운영 체제를 실행하는 가상 머신들이 기초가 되는 물리 컴퓨터를 다중화한다. 하이퍼바이저라고 불리는 소프트웨어 계층이 가상화를 제공한다.
  • 프로세스 가상 머신: 단일 프로세스를 지원하며, 플랫폼 독립적인 프로그래밍 환경을 제공한다. 자바 가상 머신, .NET Framework 등이 대표적이다.
  • 운영 체제 수준 가상화: 물리 서버를 운영 체제 수준에서 가상화하여 여러 개의 격리된 가상 서버를 실행한다. FreeBSD jail, 도커 등이 있다.


각 가상화 방식별 지원 하드웨어 및 소프트웨어 목록은 다음과 같다.
하드웨어 가상화 지원 하드웨어 목록

제조사제품명비고
AMDAMD-V이전 코드명 Pacifica
ARMARM 트러스트존
보스톤 서킷gCoregrid-on-chip, 16개의 ARC 750D 코어와 시분할 하드웨어 가상화 모듈
FreescalePowerPC MPC8572, MPC8641D
IBMSystem/370, System/390, zSeries 메인프레임
인텔인텔 VT이전 코드명 Vanderpool
썬 마이크로시스템즈Logical DomainsSPARC


시스템 가상 머신 소프트웨어 목록


  • vThere
  • ATL
  • Bochs
  • CoLinux
  • Denali
  • FAU머신
  • Integrity Workstation
  • [http://lilyvm.sourceforge.net LilyVM]
  • 마이크로소프트 버추얼 PC, 마이크로소프트 버추얼 서버
  • OKL4
  • 페러럴즈 워크스테이션
  • 페러럴즈 데스크톱
  • QEMU
  • SheepShaver
  • Simics
  • SVISTA
  • Trango real-time embedded hypervisor
  • twoOStwo
  • 유저 모드 리눅스
  • Virtual Iron
  • VM - IBM
  • VMware (ESX Server, Fusion, Virtual Server, Workstation, Player, ACE)
  • Xen
  • KVM
  • 버추얼박스

프로세스 가상 머신 소프트웨어 목록

아키텍처구현특징
ActionScript 가상 머신Adobe AIR
Adobe Flash Player
스택 머신
CLIPlayStation Mobile
.NET Framework
DotGNU Portable.NET
.net by au
Mono
SSCLI
CLR
스택 머신
Erlang VM영어BEAM영어
자바 가상 머신GNU Interpreter for Java
HotSpot
IKVM.NET
Kaffe
leJOS
Microsoft VM
SableVM
스택 머신
Lazy Virtual Machine
LLVM최적화를 위한 컴파일러 기반
Lua VMLua레지스터형의 심플한 아키텍처
Parrot 가상 머신Parrot레지스터형
P 코드 머신UCSD Pascal
Python 가상 머신[9]CPython스택 머신
Smalltalk VMSmalltalk-72/74/76/78/80
ObjectWorks
VisualWorks
Squeak
VisualAge Smalltalk
Little Smalltalk
GNU Smalltalk
Smalltalk/V
Smalltalk/X
기타
스택 머신



이론적으로 설계되었지만, 실행을 최적화하기 위해 이에 상응하는 하드웨어가 제작되는 경우도 있다.


운영 체제 수준 가상화 소프트웨어 목록

  • OpenVZ
  • Virtuozzo
  • FreeVPS
  • Linux-VServer
  • FreeBSD Jail
  • Solaris Containers
  • 도커 (Docker)
  • LXC
  • AIX Workload Partitions
  • Parallels Virtuozzo Containers
  • iCore Virtual Accounts
[1]

6. 1. 하드웨어

하드웨어 지원 가상화에서 하드웨어는 가상 머신 모니터를 구축하고 게스트 OS가 격리된 상태로 실행될 수 있도록 지원하는 아키텍처적 지원을 제공한다. 하드웨어 지원 가상화는 1972년 IBM System/370과 함께 VM/370에서 처음 도입되었으며, 이는 IBM이 공식 제품으로 제공한 최초의 가상 머신 운영 체제이다.[1]

2005년과 2006년에 인텔(Intel)과 AMD는 가상화를 지원하기 위한 추가 하드웨어를 제공했다. 썬 마이크로시스템즈(Sun Microsystems)(현재 오라클(Oracle Corporation))는 2005년 UltraSPARC T-Series 프로세서에 유사한 기능을 추가했다. 이러한 하드웨어에 적응된 가상화 플랫폼의 예로는 KVM, VMware Workstation, VMware Fusion, Hyper-V, Windows Virtual PC, Xen, Parallels Desktop for Mac, Oracle VM Server for SPARC, VirtualBox, Parallels Workstation 등이 있다.

2006년에는 1세대 32비트 및 64비트 x86 하드웨어 지원이 소프트웨어 가상화보다 성능상의 이점을 거의 제공하지 않는 것으로 밝혀졌다.

다음은 하드웨어 가상화를 지원하는 주요 하드웨어 목록이다.

제조사제품명비고
AMDAMD-V이전 코드명 Pacifica
ARMARM 트러스트존
보스톤 서킷gCoregrid-on-chip, 16개의 ARC 750D 코어와 시분할 하드웨어 가상화 모듈
FreescalePowerPC MPC8572, MPC8641D
IBMSystem/370, System/390, zSeries 메인프레임
인텔인텔 VT이전 코드명 Vanderpool
썬 마이크로시스템즈Logical DomainsSPARC


6. 2. 시스템 가상 머신 소프트웨어

시스템 가상 머신은 하드웨어 가상 머신이라고도 불리며, 여러 운영 체제를 실행하는 가상 머신들이 기초가 되는 물리 컴퓨터를 다중화(multiplex)한다. 가상화를 제공하는 소프트웨어 계층은 가상 머신 모니터 또는 하이퍼바이저라고 부른다. 하이퍼바이저는 하드웨어 자체 또는 호스트 운영 체제 위에서 실행될 수 있다.

시스템 가상 머신의 주요 이점은 다음과 같다.

  • 여러 운영 체제 환경이 완벽히 고립된 채로 같은 컴퓨터에서 존재할 수 있다.
  • 가상 머신은 실제 컴퓨터가 제공하는 것과 다른 형태의 명령어 집합 구조 (ISA)를 제공할 수 있다.


여러 개의 가상 머신들이 각각 자체 운영체제를 실행하는 것을 게스트 운영 체제라고 하며, 이는 서버 통합(server consolidation)에 사용된다. 각 가상 머신은 같은 물리 컴퓨터에서 실행되지만, 서로 다른 장치가 충돌하지 않도록 격리된다. 이러한 사용을 제품 품질의 고립(QoS 고립)이라고 한다.

여러 운영 체제를 사용하려는 목적은 가상 머신의 원래 취지였으며, 여러 개의 단일 작업 운영 체제들 사이에서 시분할을 가능하게 했다.

게스트 운영 체제들은 모두 같을 필요가 없다. 즉, 같은 컴퓨터에서 마이크로소프트 윈도우리눅스와 같이 서로 다른 운영체제를 실행하거나, 최신 버전에서 지원하지 않는 소프트웨어를 지원하기 위해 옛날 버전의 운영체제를 설치할 수 있다. 다른 게스트 운영체제를 지원하기 위해 가상 머신을 사용하는 것은 임베디드 시스템에서 인기가 높다. 일반적으로 실시간 운영 체제를 리눅스나 윈도와 같은 높은 수준의 운영 체제와 함께 지원한다.

다른 사용 예로는 신뢰할 수 없는 운영체제를 sandbox하는 것이 있다. 이는 개발 중인 시스템일 수 있기 때문이다. 가상 머신은 더 나은 오류 수정 접근과 더 빠른 다시 시작 등 운영 체제 개발에 다른 이점들을 제공한다.

QoS 고립을 위한 가상 머신의 인기는 대부분의 동시대 운영 체제가 제공하는 불완전한 자원 고립을 이끈다. 솔라리스 존은 강력한 자원 고립을 제공하는 대안이다. 존은 가상 머신이 아니지만 "운영 체제 가상화"의 예이다. 여기에는 Virtuozzo, FreeBSD Jail, Linux-VServer, chroot jail, OpenVZ와 같은 가상 환경(가상 서버)이 포함된다. 이러한 환경은 운영 체제 안의 프로세스를 특정 형태로 둘러싼다.

시스템 가상 머신 소프트웨어의 예시는 다음과 같다.

  • vThere
  • ATL
  • Bochs
  • CoLinux
  • Denali
  • FAU머신
  • Integrity Workstation
  • [http://lilyvm.sourceforge.net LilyVM]
  • 마이크로소프트 버추얼 PC, 마이크로소프트 버추얼 서버
  • OKL4
  • 페러럴즈 워크스테이션
  • 페러럴즈 데스크톱
  • QEMU
  • SheepShaver
  • Simics
  • SVISTA
  • Trango real-time embedded hypervisor
  • twoOStwo
  • 유저 모드 리눅스
  • Virtual Iron
  • VM - IBM
  • VMware (ESX Server, Fusion, Virtual Server, Workstation, Player, ACE)
  • Xen
  • KVM
  • 버추얼박스

6. 3. 프로세스 가상 머신 소프트웨어

아키텍처구현특징
ActionScript 가상 머신Adobe AIR
Adobe Flash Player
스택 머신
CLIPlayStation Mobile
.NET Framework
DotGNU Portable.NET
.net by au
Mono
SSCLI
CLR
스택 머신
Erlang VM영어BEAM영어
자바 가상 머신GNU Interpreter for Java
HotSpot
IKVM.NET
Kaffe
leJOS
Microsoft VM
SableVM
스택 머신
Lazy Virtual Machine
LLVM최적화를 위한 컴파일러 기반
Lua VMLua레지스터형의 심플한 아키텍처
Parrot 가상 머신Parrot레지스터형
P 코드 머신UCSD Pascal
Python 가상 머신[9]CPython스택 머신
Smalltalk VMSmalltalk-72/74/76/78/80
ObjectWorks
VisualWorks
Squeak
VisualAge Smalltalk
Little Smalltalk
GNU Smalltalk
Smalltalk/V
Smalltalk/X
기타
스택 머신



이러한 가상 머신은 이론적으로 설계되었지만, 실행을 최적화하기 위해 이에 상응하는 하드웨어가 제작되는 경우도 있다.



프로세스 VM은 때때로 ''응용 가상 머신'' 또는 ''관리형 런타임 환경''(MRE)이라고도 하며, 호스트 OS 내에서 일반적인 응용 프로그램으로 실행되며 단일 프로세스를 지원한다. 해당 프로세스가 시작될 때 생성되고 종료될 때 파괴된다. 그 목적은 기본 하드웨어 또는 운영 체제의 세부 사항을 추상화하고 모든 플랫폼에서 동일한 방식으로 프로그램을 실행할 수 있도록 하는 시스템 플랫폼 독립적인 프로그래밍 환경을 제공하는 것이다.

프로세스 VM은 고급 프로그래밍 언어의 높은 수준의 추상화를 제공한다(시스템 VM의 낮은 수준의 ISA 추상화와 비교). 프로세스 VM은 인터프리터를 사용하여 구현된다. JIT 컴파일을 사용하여 컴파일된 프로그래밍 언어와 비슷한 성능을 얻을 수 있다.

이 유형의 VM은 자바 프로그래밍 언어에서 인기를 얻었으며, 이는 자바 가상 머신을 사용하여 구현된다. 다른 예로는 패럿 가상 머신과 .NET Framework가 있으며, 이는 공용 언어 런타임이라는 VM에서 실행된다. 이들은 모두 모든 컴퓨터 언어에 대한 추상화 계층 역할을 할 수 있다.

프로세스 VM의 특별한 경우는 (잠재적으로 이기종인) 컴퓨터 클러스터의 통신 메커니즘을 추상화하는 시스템이다. 이러한 VM은 단일 프로세스로 구성되지 않고 클러스터의 각 물리적 머신당 하나의 프로세스로 구성된다. 프로그래머가 상호 연결 및 OS에서 제공하는 통신 메커니즘이 아닌 알고리즘에 집중할 수 있도록 하여 동시 응용 프로그램을 프로그래밍하는 작업을 쉽게 하도록 설계되었다. 통신이 발생한다는 사실을 숨기지 않으므로 클러스터를 단일 머신으로 표시하려고 시도하지 않는다.

다른 프로세스 VM과 달리 이러한 시스템은 특정 프로그래밍 언어를 제공하지 않고 기존 언어에 포함되어 있다. 일반적으로 이러한 시스템은 여러 언어(예: C포트란)에 대한 바인딩을 제공한다. 예로는 PVM과 MPI가 있다.

소프트웨어를 통한 가상 CPU에서 바이트 코드를 실행하는 방식이 일반적이다. 바이트 코드의 실행 방식에는 인터프리터 방식, 실행 전에 모든 바이트 코드를 네이티브 코드로 변환하는 사전 컴파일 방식, 실행 시 컴파일 방식이 있다. 현재는 성능 측면에서 실행 시 컴파일 방식이 주류를 이룬다. 하드웨어 제약이 없다는 것이 특징이며, 형식화된 연산을 지원하는 가상 머신도 있다.

몇몇 가상 머신들은 자세한 규격으로 존재하는 하드웨어만 가상으로 구현한다.

  • p-code machine 규격: 프로그래머들이 파스칼 언어 프로그램을 해당 규격을 올바르게 지원하는 가상 머신 소프트웨어가 돌아가는 아무 컴퓨터에서나 쓸 수 있다.
  • 자바 가상 머신 규격
  • 닷넷 프레임워크 규격의 심장부인 공통 언어 하부구조
  • 오픈 펌웨어: 플러그인 하드웨어가 아무 종류의 CPU에서나 시동 시간 진단, 설정 구성 코드, 장치 드라이버를 포함하여 실행할 수 있다.


이 기술은 다양한 컴퓨터가 해당 규격에 맞춰 쓰인 아무 소프트웨어나 실행할 수 있게 해 준다. 가상 머신 소프트웨어 자체만, 그 소프트웨어가 실행되는 각 컴퓨터에 맞춰 쓰인다.

현대의 가상 머신은 컴파일을 위한 중간 대상으로서나 인터프리터에서 직접 구현할 플랫폼으로서 사용되는데, 그 예로 2013년에 공개된 ART은 바이트코드를 네이티브 코드로 컴파일하며, 초기의 달빅 가상 머신은 바이트코드를 해석한다. 가상 머신은 에뮬레이터의 역할을 수행할 수도 있는데, 다른 컴퓨터 프로세서를 위해 쓰인 응용 소프트웨어와 운영 체제가 동작할 수 있게 도와준다.

6. 4. 운영 체제 수준 가상화 소프트웨어

OS 수준 가상화는 물리 서버를 운영 체제 수준에서 가상화하여 여러 개의 격리되고 안전한 가상화 서버를 단일 물리 서버에서 실행할 수 있도록 한다. "게스트" 운영 체제 환경은 호스트 시스템과 동일한 운영 체제 인스턴스를 공유한다. 따라서 동일한 운영 체제 커널이 "게스트" 환경을 구현하는 데에도 사용되며, 특정 "게스트" 환경에서 실행되는 응용 프로그램은 이를 독립 실행형 시스템으로 본다.

OS 수준 가상화의 초기 구현은 FreeBSD jail이며, 다른 예로는 다음과 같은 것들이 있다.

  • OpenVZ
  • Virtuozzo
  • FreeVPS
  • Linux-VServer
  • FreeBSD Jail
  • Solaris Containers
  • 도커 (Docker)
  • LXC
  • AIX Workload Partitions
  • Parallels Virtuozzo Containers
  • iCore Virtual Accounts
[1]

참조

[1] 논문 The Ideal Versus the Real: Revisiting the History of Virtual Machines and Containers 2019
[2] 웹사이트 Nested virtualization: Shadow turtles https://www.linux-kv[...] KVM forum 2021-05-07
[3] 웹사이트 The Turtles Project: Design and Implementation of Nested Virtualization https://www.usenix.o[...] 2014-12-16
[4] 웹사이트 HVX: Virtualizing the Cloud http://0b4af6cdc2f0c[...] 2014-12-16
[5] 웹사이트 4th-Gen Intel Core vPro Processors with Intel VMCS Shadowing https://www-ssl.inte[...] Intel 2014-12-16
[6] 서적 Foundations of modern networking: SDN, NFV, QoE, IoT, and Cloud https://www.worldcat[...]
[7] 웹사이트 Hypervisor {{!}} Apple Developer Documentation https://web.archive.[...] 2018-02-09
[8] 웹사이트 Virtualization https://developer.ap[...] 2022-08-18
[9] 웹사이트 dis --- Python バイトコードの逆アセンブラ https://docs.python.[...] 2024-03-26
[10] 서적 Virtual machines: versatile platforms for systems and processes Elsevier 2005
[11] 서적 Smalltalk-80: The Language and its Implementation https://archive.org/[...] Addison-Wesley 1983
[12] 콘퍼런스 Efficient implementation of the Smalltalk-80 system http://portal.acm.or[...] ACM 1984
[13] 저널 A brief history of just-in-time http://portal.acm.or[...] 2003

관련 사건 타임라인

( 최근 20개의 뉴스만 표기 됩니다. )



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com